package com.utn.tp.integrador.manejomensajes;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import com.utn.tp.integrador.bd.BaseDatosSingleton;
import com.utn.tp.integrador.entidades.MensajeWeb;
import com.utn.tp.integrador.entidades.Usuario;
import com.utn.tp.integrador.notificaciones.NotificacionMensajeWeb;

import android.app.Service;
import android.content.Intent;
import android.net.ParseException;
import android.os.AsyncTask;
import android.os.Binder;
import android.os.IBinder;

public class ServicioReceptorMensajes extends Service {

	private SimpleDateFormat dateFormat = new SimpleDateFormat(
			"dd/MM/yyyy HH:mm:ss");
	private final IBinder binder = new LocalBinder();

	private void notificar() {
		NotificacionMensajeWeb.notifyRecibido(this);
	}

	@Override
	public IBinder onBind(Intent arg0) {
		return binder;
	}

	@Override
	public void onCreate() {
		super.onCreate();
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Usuario usuario = BaseDatosSingleton.getInstance(this).getBaseDatos()
				.getUsuarioPropio();
		String timestamp = BaseDatosSingleton.getInstance(this).getBaseDatos()
				.getUltimaTimestamp();
		GetReceivedMessagesTask receivedMessagesTask = new GetReceivedMessagesTask(
				usuario);
		receivedMessagesTask.execute(timestamp);
		return super.onStartCommand(intent, flags, startId);
	}

	protected class GetReceivedMessagesTask extends
			AsyncTask<String, Integer, ArrayList<InfoMensajeRecibido>> {

		Usuario usuario;

		public GetReceivedMessagesTask(Usuario usuario) {
			this.usuario = usuario;
		}

		@Override
		protected ArrayList<InfoMensajeRecibido> doInBackground(
				String... params) {
			ArrayList<InfoMensajeRecibido> mensajesRecibidos = ServicioWebSingleton
					.getInstance(usuario.getNombreUsuario(),
							usuario.getPassword()).getMessages(params[0]);
			return mensajesRecibidos;
		}

		@Override
		protected void onPostExecute(
				ArrayList<InfoMensajeRecibido> receivedMessages) {
			super.onPostExecute(receivedMessages);
			Date dt = new Date();
			for (InfoMensajeRecibido receivedMessage : receivedMessages)
				if (receivedMessage.getCode() == InfoServicioWeb.SUCCESS
						&& receivedMessage.getTimestamp() != null) {
					MensajeWeb mensaje = new MensajeWeb();
					mensaje.setRemitente(receivedMessage.getFrom());
					mensaje.setDestinatario(usuario.getNombreUsuario());
					mensaje.setMensaje(receivedMessage.getMessage());
					try {
						dt = dateFormat.parse(receivedMessage.getTimestamp());
						mensaje.setFecha(dateFormat.format(dt));
					} catch (ParseException e) {
						e.printStackTrace();
					} catch (java.text.ParseException e) {
						e.printStackTrace();
					}
					mensaje.setTipo(MensajeWeb.TYPE_RECEIVED);
					BaseDatosSingleton
							.getInstance(ServicioReceptorMensajes.this)
							.getBaseDatos().insertarMensajeWeb(mensaje);
					BaseDatosSingleton
							.getInstance(ServicioReceptorMensajes.this)
							.getBaseDatos()
							.insertarTimestamp(receivedMessage.getTimestamp());
					notificar();
				}
		}
	}

	public class LocalBinder extends Binder {
		ServicioReceptorMensajes getService() {
			return ServicioReceptorMensajes.this;
		}

	}
}
